--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RNS/Utilities/rnsh/args.py ec8d43a548017de41cdf73e7e3eb9844a5d349cd (ec8d43a5) Text, 5.94 KB
T8b949e# Based on the original rnsh program by Aaron Heise (@acehoss)
T8b949e# https://github.com/acehoss/rnsh - MIT License - Copyright (c) 2023 Aaron Heise
T8b949e# This version of rnsh is included in RNS under the Reticulum License
T8b949e#
T8b949e# Reticulum License
T8b949e#
T8b949e# Copyright (c) 2016-2026 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# - The Software shall not be used in any kind of system which includes amongst
T8b949e# its functions the ability to purposefully do harm to human beings.
T8b949e#
T8b949e# - The Software shall not be used, directly or indirectly, in the creation of
T8b949e# an artificial intelligence, machine learning or language model training
T8b949e# dataset, including but not limited to any use that contributes to the
T8b949e# training or development of such a model or algorithm.
T8b949e#
T8b949e# - The above copyright notice and this permission notice shall be included in
T8b949e# all copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.
Tff7b72import T7ee787argparse
Tff7b72import T7ee787sys
Tff7b72from T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rnshT7ee787.T7ee787_version Tff7b72import Te6edf3__version__ Tff7b72as Te6edf3__rnsh_version__
Tff7b72from T7ee787RNST7ee787.T7ee787_version Tff7b72import Te6edf3__version__
Te6edf3DEFAULT_SERVICE_NAME Tff7b72= Ta5d6ff"Ta5d6ffdefaultTa5d6ff"
Tff7b72def Td2a8ffsetup_argument_parserTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffReticulum Remote Shell UtilityTa5d6ff"Tb4b4b4, Te6edf3epilogTff7b72=Ta5d6ff"Ta5d6ffWhen specifying a command to execute, separate rnshTffea00\nTa5d6ffoptions from the command and its arguments with --Tffea00\nTffea00\nTa5d6ffFor example:Tffea00\nTa5d6ff rnsh -l -- /bin/bash --loginTffea00\nTa5d6ff rnsh <destination> -- ls -la /tmpTa5d6ff"Tb4b4b4, Te6edf3formatter_classTff7b72=Te6edf3argparseTff7b72.Td2a8ffRawDescriptionHelpFormatterTb4b4b4)
T8b949e# Common options
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--configTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff-cTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to config directoryTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--rnsconfigTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to alternative Reticulum config directoryTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--identityTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff-iTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to identity file to useTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-vTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--verboseTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffcountTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff0Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffincrease verbosityTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-qTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--quietTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffcountTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff0Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdecrease verbosityTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-pTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--print-identityTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffprint identity and destination info and exitTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--versionTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4, Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ffrnsh Tffd700{rv}Ta5d6ff (protocol Tffd700{pv}Ta5d6ff)Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3rvTff7b72=Te6edf3__version__Tb4b4b4, Te6edf3pvTff7b72=Te6edf3__rnsh_version__Tb4b4b4)Tb4b4b4)
T8b949e# Listener options
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-lTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--listenTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6fflisten (server) mode; any command specified after -- will be used as the default command when the initiator does not provide one or when remote command execution is disabled; if no command is specified, the default shell of the user running rnsh will be usedTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-sTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--serviceTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffservice name for identity file if not the defaultTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-bTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--announceTa5d6ff"Tb4b4b4,Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4,Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffannounce on startup and every PERIOD seconds; specify 0 to announce on startup onlyTa5d6ff"Tb4b4b4,Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffPERIODTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-aTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--allowedTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffappendTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffHASHTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffallow this identity to connect (may be specified multiple times); allowed identities can also be specified in ~/.rnsh/allowed_identities or ~/.config/rnsh/allowed_identities, one hash per lineTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-nTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--no-authTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdisable authentication (allow any identity to connect)Ta5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-ATa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--remote-command-as-argsTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffconcatenate remote command to the argument list of the default program or shellTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-CTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--no-remote-commandTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdisable executing command lines received from the remote initiatorTa5d6ff"Tb4b4b4)
T8b949e# Initiator options
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-NTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--no-idTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdisable identity announcement on connectTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-mTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--mirrorTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffreturn with the exit code of the remote processTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-wTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--timeoutTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffconnect and request timeout in secondsTa5d6ff"Tb4b4b4, Te6edf3metavarTff7b72=Ta5d6ff"Ta5d6ffSECONDSTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ffdestinationTa5d6ff"Tb4b4b4, Te6edf3nargsTff7b72=Ta5d6ff"Ta5d6ff?Ta5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffhexadecimal hash of the destination to connect toTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Tff7b72return Te6edf3parser
Tff7b72def Td2a8ffparse_argumentsTb4b4b4(Te6edf3argvTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3argv Tff7b72is Tff7b72NoneTb4b4b4: Te6edf3argv Tff7b72= Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff1Tb4b4b4:Tb4b4b4]
T8b949e# Split at -- to separate rnsh options from the command to execute.
T8b949e# Everything before -- (or the entire argv if no --) goes to argparse.
T8b949e# Everything after -- becomes the command list.
Tff7b72tryTb4b4b4:
Te6edf3split_idx Tff7b72= Te6edf3argvTff7b72.Td2a8ffindexTb4b4b4(Ta5d6ff"Ta5d6ff--Ta5d6ff"Tb4b4b4)
Te6edf3rnsh_argv Tff7b72= Te6edf3argvTb4b4b4[Tb4b4b4:Te6edf3split_idxTb4b4b4]
Te6edf3command Tff7b72= Te6edf3argvTb4b4b4[Te6edf3split_idx Tff7b72+ T79c0ff1Tb4b4b4:Tb4b4b4]
Tff7b72except Tf85149ValueErrorTb4b4b4:
Te6edf3rnsh_argv Tff7b72= Te6edf3argv
Te6edf3command Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3parser Tff7b72= Te6edf3setup_argument_parserTb4b4b4(Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Te6edf3rnsh_argvTb4b4b4)
Te6edf3argsTff7b72.Td2a8ffcommand Tff7b72= Te6edf3command
Tff7b72if Te6edf3argsTff7b72.Td2a8fflisten Tff7b72and Tff7b72not Te6edf3argsTff7b72.Td2a8ffserviceTb4b4b4: Te6edf3argsTff7b72.Td2a8ffservice Tff7b72= Te6edf3DEFAULT_SERVICE_NAME
Tff7b72return Te6edf3argsTb4b4b4, Te6edf3parser
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────